
#include "ThreadSapo.h"

SDL_Surface *screenSapo;
int finSapo;

int thread_func_Sapo(void *unused)
{	
	// aca tiene que venir toda la logica del sapo y los eventos del mouse.
	// Las pelotas tienen un idColor, la idea es que con alguna funcion random se elija el color de la pelota secundaria.
	// porque le agregue el idColor a la pelota?, porque como puede ser una textura la pelota, desde el XML le ponemos 
	// un idColor cosa de elegirla con la random.
	// En el Objeto "Escenario" hay una lista de pelotasDisponibles, que son todas las pelotas que se 
	// encontraron definidas en el XML.
	// La pelota que esta volando esta en el Escenario en el att "pelotaEnVuelo", si este esta en NULL se puede lanzar una pelota,
	// sino no.

	Escenario *escenario=(Escenario*)unused;

	//Giro del sapo y eventos del mouse


	double posicionMouseX;
	double posicionMouseY;

	double posicionNewX;
	double posicionNewY;

	double centroXSapo=0;
	double centroYSapo=0;

	string aux;
	vector<Elemento*> listaElementos = escenario->getListaElementos();
	vector<Elemento*>::iterator itElementos;

	SDL_Event event;
    while(SDL_WaitEvent(&event))
    {
		cout << "hilo sapo";
		switch(event.type)
        {
			case SDL_MOUSEMOTION:
            {
				posicionNewX = event.motion.x - ((escenario->GetGeneral()->GetResolucion())/2);
                posicionNewY = -(event.motion.y) + ((escenario->GetGeneral()->GetResolucionAlto())/2);
                float angulo = ((atan2(posicionNewY , posicionNewX ))* 180 / M_PI ) ;
                long anguloInt = ((long) angulo)%360;
                if(posicionNewY<0) anguloInt = 360 + anguloInt;

                for (itElementos=listaElementos.begin(); itElementos!=listaElementos.end(); ++itElementos)
                {       
                    aux = typeid(**itElementos).name() ;
                    aux.erase(0,6);
                    int angulo = (int)anguloInt;
                    angulo = 360 - angulo;

                    if ((aux == "Sapo")&&(angulo>=0)&&(angulo<=359))
                    { 
						centroXSapo=(*itElementos)->getPosX();
						centroYSapo=(*itElementos)->getPosY();

						(*itElementos)->setAngulo(angulo);

                        posicionMouseX = (int)event.motion.x - ((escenario->GetGeneral()->GetResolucion())/2);
                        posicionMouseY = -(int)event.motion.y + ((escenario->GetGeneral()->GetResolucionAlto())/2);
                    }
                }
                break;
           }
           case SDL_MOUSEBUTTONDOWN:
		   {
				posicionNewX = event.motion.x - ((escenario->GetGeneral()->GetResolucion())/2);
                posicionNewY = -(event.motion.y) + ((escenario->GetGeneral()->GetResolucionAlto())/2);
                float angulo = ((atan2(posicionNewY , posicionNewX ))* 180 / M_PI ) ;
                long anguloInt = ((long) angulo)%360;
                if(posicionNewY<0) anguloInt = 360 + anguloInt;

                printf("Boton del mouse presionado ");
				printf("Boton %i en (%i,%i)\n",event.button.button,event.button.x,event.button.y);

				Pelota* pelotita=escenario->getPelotasDisponibles()[0];
				pelotita->setPosX(centroXSapo);
				pelotita->setPosY(centroYSapo);
				
				printf("X, Y de la pelota: (%i,%i)\n",pelotita->getPosX(),pelotita->getPosY());

				//calculo el angulo de lanzamiento
				pelotita->setAnguloTrayectoria(angulo);
				escenario->setPelotaEnVuelo(pelotita);

				break;
			}
            case SDL_QUIT:
                 printf("Evento Quit \n bye...\n");
             
			exit(0);
        }
    }



return 0;
}

ThreadSapo::ThreadSapo(SDL_Surface *screenPrincipal,Escenario *esc,int finDeJuego)
{
	screenSapo=screenPrincipal;
	finSapo=finDeJuego;

	//Inicio el Hilo
	SDL_Thread *thread;
    thread = SDL_CreateThread(thread_func_Sapo, esc);
    if ( thread == NULL ) 
    {
        fprintf(stderr, "No se puede crear el hilo de Sapo: %s\n",
	        SDL_GetError());
        return;
    }
	
}
